package com.cmdb.system.service;

import java.io.File;
import java.util.List;
import com.cmdb.system.domain.SysEmailConfig;
import com.cmdb.system.domain.SysEmailLog;
import com.cmdb.system.domain.SysUserEmail;

/**
 * 邮件服务接口
 */
public interface ISysEmailService {
    /**
     * 查询邮件配置
     *
     * @param configId 配置ID
     * @return 邮件配置
     */
    public SysEmailConfig selectSysEmailConfigById(Long configId);

    /**
     * 查询邮件配置列表
     *
     * @param sysEmailConfig 邮件配置
     * @return 邮件配置集合
     */
    public List<SysEmailConfig> selectSysEmailConfigList(SysEmailConfig sysEmailConfig);

    /**
     * 新增邮件配置
     *
     * @param sysEmailConfig 邮件配置
     * @return 结果
     */
    public int insertSysEmailConfig(SysEmailConfig sysEmailConfig);

    /**
     * 修改邮件配置
     *
     * @param sysEmailConfig 邮件配置
     * @return 结果
     */
    public int updateSysEmailConfig(SysEmailConfig sysEmailConfig);

    /**
     * 删除邮件配置
     *
     * @param configId 配置ID
     * @return 结果
     */
    public int deleteSysEmailConfigById(Long configId);

    /**
     * 批量删除邮件配置
     *
     * @param configIds 需要删除的数据ID
     * @return 结果
     */
    public int deleteSysEmailConfigByIds(Long[] configIds);

    /**
     * 查询邮件发送记录
     *
     * @param logId 日志ID
     * @return 邮件发送记录
     */
    public SysEmailLog selectSysEmailLogById(Long logId);

    /**
     * 查询邮件发送记录列表
     *
     * @param sysEmailLog 邮件发送记录
     * @return 邮件发送记录集合
     */
    public List<SysEmailLog> selectSysEmailLogList(SysEmailLog sysEmailLog);

    /**
     * 新增邮件发送记录
     *
     * @param sysEmailLog 邮件发送记录
     * @return 结果
     */
    public int insertSysEmailLog(SysEmailLog sysEmailLog);

    /**
     * 修改邮件发送记录
     *
     * @param sysEmailLog 邮件发送记录
     * @return 结果
     */
    public int updateSysEmailLog(SysEmailLog sysEmailLog);

    /**
     * 删除邮件发送记录
     *
     * @param logId 日志ID
     * @return 结果
     */
    public int deleteSysEmailLogById(Long logId);

    /**
     * 批量删除邮件发送记录
     *
     * @param logIds 需要删除的数据ID
     * @return 结果
     */
    public int deleteSysEmailLogByIds(Long[] logIds);

    /**
     * 发送简单文本邮件
     *
     * @param userId 用户ID
     * @param to 收件人
     * @param subject 主题
     * @param content 内容
     * @return 是否成功
     */
    public boolean sendSimpleMail(Long userId, String to, String subject, String content);

    /**
     * 发送HTML邮件
     *
     * @param userId 用户ID
     * @param to 收件人
     * @param subject 主题
     * @param content HTML内容
     * @return 是否成功
     */
    public boolean sendHtmlMail(Long userId, String to, String subject, String content);

    /**
     * 发送带附件的邮件
     *
     * @param userId 用户ID
     * @param to 收件人
     * @param subject 主题
     * @param content 内容
     * @param files 附件列表
     * @return 是否成功
     */
    public boolean sendAttachmentsMail(Long userId, String to, String subject, String content, List<File> files);

    /**
     * 发送带图片的邮件
     *
     * @param userId 用户ID
     * @param to 收件人
     * @param subject 主题
     * @param content HTML内容
     * @param imageFiles 图片文件列表
     * @return 是否成功
     */
    public boolean sendImageMail(Long userId, String to, String subject, String content, List<File> imageFiles);

    /**
     * 发送完整邮件
     *
     * @param userId 用户ID
     * @param to 收件人
     * @param cc 抄送
     * @param bcc 密送
     * @param subject 主题
     * @param content 内容
     * @param isHtml 是否HTML
     * @param files 附件列表
     * @param importance 重要等级
     * @return 是否成功
     */
    public boolean sendFullMail(Long userId, String to, String cc, String bcc, String subject, String content,
            boolean isHtml, List<File> files, String importance);

    /**
     * 获取默认邮件配置
     *
     * @return 邮件配置
     */
    public SysEmailConfig selectDefaultEmailConfig();

    /**
     * 获取用户默认邮箱
     *
     * @param userId 用户ID
     * @return 用户邮箱
     */
    public SysUserEmail selectDefaultUserEmail(Long userId);

    /**
     * 查询用户邮箱
     *
     * @param userEmailId 用户邮箱ID
     * @return 用户邮箱
     */
    public SysUserEmail selectSysUserEmailById(Long userEmailId);

    /**
     * 查询用户邮箱列表
     *
     * @param sysUserEmail 用户邮箱
     * @return 用户邮箱集合
     */
    public List<SysUserEmail> selectSysUserEmailList(SysUserEmail sysUserEmail);

    /**
     * 查询用户的邮箱列表
     *
     * @param userId 用户ID
     * @return 用户邮箱集合
     */
    public List<SysUserEmail> selectUserEmailList(Long userId);

    /**
     * 新增用户邮箱
     *
     * @param sysUserEmail 用户邮箱
     * @return 结果
     */
    public int insertSysUserEmail(SysUserEmail sysUserEmail);

    /**
     * 修改用户邮箱
     *
     * @param sysUserEmail 用户邮箱
     * @return 结果
     */
    public int updateSysUserEmail(SysUserEmail sysUserEmail);

    /**
     * 删除用户邮箱
     *
     * @param userEmailId 用户邮箱ID
     * @return 结果
     */
    public int deleteSysUserEmailById(Long userEmailId);

    /**
     * 批量删除用户邮箱
     *
     * @param userEmailIds 需要删除的数据ID
     * @return 结果
     */
    public int deleteSysUserEmailByIds(Long[] userEmailIds);
} 